package com.uh.calculation.batchOperator;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.uh.calculation.bean.*;
import com.uh.calculation.util.FormulaBatchUtil;
import com.uh.calculation.util.FormulaUtil;
import com.uh.calculation.util.GetBean;
import com.uh.calculation.util.TimeUtil;
import com.uh.microservice.core.dao.JdbcDao;
import lombok.Data;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 本月M12+上月M13)/本月M13  单表  上月M13字典 加#m
 */
@Data
public class SyBathOperator {
    private JdbcDao jdbcDao;
    private WarnJiSuanBean warnJiSuanBean;


    private SqlWriteBean sqlWriteBean;




    public SyBathOperator(JdbcDao jdbcDao, WarnJiSuanBean warnJiSuanBean, SqlWriteBean sqlWriteBean){
        this.jdbcDao=jdbcDao;
        this.warnJiSuanBean=warnJiSuanBean;
        this.sqlWriteBean=  sqlWriteBean;
    }

    /**
     * 单表数据
     *
     * @param list
     * @return
     */
    public void jisuan(JSONArray ls, List<OperatorVal> list) {
        if (ls == null || ls.size() == 0) {
            return;
        }
        this.warnJiSuanBean = warnJiSuanBean;
        Date lastTime = warnJiSuanBean.getLastTime();
        //反转2021 与 2022字段区别
        //GetFileds getFileds = new GetFileds(jdbcDao,list,warnJiSuanBean);
        for (OperatorVal operatorVal : list) {
            try {
                List<FormulaBean> formulaBeans = operatorVal.getFormulaBeans();//计算公式
                String field = operatorVal.getField();
                List<TbFeild> tbFeilds = GetBean.getTbf(field);
                String f1 = tbFeilds.get(0).getFieldName();
                String f2 = tbFeilds.get(1).getFieldName();
                String f3 = tbFeilds.get(2).getFieldName();
                //WarnJiSuanBean warnJiSuanBean = new WarnJiSuanBean();
                for (int i = 1; i < ls.size(); i++) {
                    try {
                        JSONObject object = ls.getJSONObject(i);
                        //时间判断
                        String timeCode = object.get("time_code").toString();
                        //String company_code = object.get("company_code").toString();
                        //warnJiSuanBean.setSurveyobjectid(company_code);
                        //时间游标判断，及核查规则是否符合
                        if (TimeUtil.bj(lastTime, timeCode, sqlWriteBean.getYear_is_month(), sqlWriteBean.getIs_hc())) {
                            String d1 = object.get(f1).toString();
                            String d2 = ls.getJSONObject(i-1).get(f2).toString();
                            String d3 = object.get(f3).toString();
                            //根据当前计算类解析规则  将数据和字段对应
                            tbFeilds.get(0).setData(d1);
                            tbFeilds.get(1).setData(d2);
                            tbFeilds.get(2).setData(d3);
                            //扔进公式解析工具
                            sqlWriteBean.setDimension(operatorVal.getDimension());
                            sqlWriteBean.setTimeCode(timeCode);
                            new FormulaBatchUtil(tbFeilds, formulaBeans, warnJiSuanBean,sqlWriteBean);
                        }
                    } catch (Exception e) {

                    }
                }
            } catch (Exception e) {

            }


        }
    }
}
